package ch.epfl.lara.fdsolver



abstract class MultiRange {
  def valuesType = T1 <: Range

  val _myFreeVar: FreeVar
  
  private def defaultRange: Range[valuesType]

  private var ranges: List[Range[valuesType]]

  MultiRange(fv: FreeVar) = {
    _myFreeVar = fv
    ranges = List(defaultRange)
  }

  def getRanges: List[Range[valuesType]] = ranges

  def intersection(that: MultiRange <: this.Type)

  def applyConstraint(c: Constraint, mrs: HashMap[FreeVar, MultiRange]): MultiRange

  def ...
}

class Range[T1] {
  def min: T1
  def max: T1
}
